let fs = require("fs")
let path = require("path")
const dir = "./file"
const subDir = path.join(dir, "subFile")
// // 读取文件内容并打印
// // 编写一个 Node.js 脚本，读取一个文本文件（example.txt）的内容，并将其打印到控制台。要求使用异步和同步两种方式实现。
// // 提示：使用 fs.readFile() 和 fs.readFileSync()。
// // 异步方式：
// let filePath = `${dir}/example.txt`
// fs.readFile(filePath, (err, data) => {
//     if (err) {
//         console.log(`异步方法读取失败：${err}`)
//         return
//     }
//     console.log(`异步方法读取成功：${data.toString()}`)
// })
// // 同步方式：
// try {
//     console.log(`同步方法读取成功：${fs.readFileSync(filePath)}`)

// } catch (err) {
//     console.log(`同步方法读取失败：${err}`)
// }



// // 写入文件内容
// // 编写一个 Node.js 脚本，将一段文本内容写入到一个文件（output.txt）中。如果文件已存在，则覆盖原有内容；如果文件不存在，则创建文件。
// // 提示：使用 fs.writeFile() 或 fs.writeFileSync()。
// // 异步方式:
// let newData = "new data: miku"
// fs.writeFile(`${dir}/output.txt`, newData, (err) => {
//     if (err) {
//         console.log(`异步写入文件失败：${err}`)
//         return
//     }
//     console.log(`异步写入文件成功`)
// })
// // 同步方式：
// let newDataSync = "new data: rin"
// try {
//     fs.writeFileSync(`${writeToDir}/output.txt`, newDataSync)
//     console.log(`同步写入文件成功`)
// } catch (err) {
//     console.log(`同步写入文件失败：${err}`)
// }


// // 追加内容到文件
// // 编写一个 Node.js 脚本，将一段文本内容追加到一个文件（example.txt）的末尾。如果文件不存在，则自动创建文件。
// // 提示：使用 fs.appendFile() 或 fs.appendFileSync()。
// let text = "bad apple"
// fs.appendFile(`${dir}/example.txt`, text, (err) => {
//     if (err) {
//         console.log(`异步追加文件失败： ${err}`)
//         return
//     }
//     console.log(`异步追加文件成功`)
// })
// // 同步方式：
// let textSync = "bad apple(sync)"
// try {
//     fs.appendFileSync(`${writeToDir}/output.txt`, textSync)
//     console.log(`同步追加文件成功`)
// } catch (err) {
//     console.log(`同步追加文件失败：${err}`)
// }

// // 进阶练习题
// // 创建和删除文件
// // 编写一个 Node.js 脚本，完成以下任务：
// // 创建一个名为 test.txt 的文件，并写入内容 "Hello, Node.js!"。
// // 检查文件是否存在，如果存在，则删除该文件。
// // 提示：使用 fs.writeFile()、fs.existsSync() 和 fs.unlink()。
// // 需要写入的内容
// let content = "Hello, Node.js!"

// // 创建文件：不存在就创建并写入内容，存在即直接写入内容
// fs.writeFile(`${dir}/test.txt`, content, (err) => {
//     if (err) {
//         console.log("文件写入失败")
//         return
//     }
//     console.log("文件写入成功")

//     // 检查文件是否存在：存在返回true，否则返回false
//     if (fs.existsSync(`${dir}/test.txt`)) {
//         console.log("文件存在，准备删除...")
//     } else {
//         console.log("文件不存在")
//         return
//     }

//     // 删除文件
//     fs.unlink(`${dir}/test.txt`, (err) => {
//         if (err) {
//             console.error('无法删除文件：', err);
//             return;
//         }
//         console.log('文件已成功删除！');
//     })
// })


// 创建和删除目录
// 编写一个 Node.js 脚本，完成以下任务：
// 创建一个名为 testDir 的目录。
// 在该目录下创建一个名为 example.txt 的文件，并写入内容 "This is a test file."。
// 删除该目录及其所有内容。
// 提示：使用 fs.mkdir()、fs.writeFile() 和 fs.rmdir()（fs.rmdir() 的 recursive 参数）。
// 定义路径
// const testDir = "testDir" //主目录
// const fileName = "example.txt" //文件名
// const testFilePath = path.join(testDir, fileName) // 文件路径
// // 创建主目录
// fs.mkdir(testDir, (err) => {
//     if (err) {
//         console.log(`创建主目录失败：${err}`)
//         return
//     }
//     console.log(`创建主目录成功：${testDir}`)

//     // 写入文件
//     fs.writeFile(testFilePath, "This is a test file.", (err) => {
//         if (err) {
//             console.log(`写入文件失败：${err}`)
//             return
//         }
//         console.log(`写入文件成功：${testFilePath}`)
//     })

//     // 删除该目录及其所有内容
//     fs.rmdir(testDir, { recursive: true }, (err) => {
//         if (err) {
//           console.error(`删除主目录失败：${err}`);
//         } else {
//           console.log(`删除主目录成功：${testDir}`);
//         }
//       })
// })


// 读取目录内容
// 编写一个 Node.js 脚本，读取指定目录下的所有文件和子目录的名称，并打印到控制台。
// 提示：使用 fs.readdir() 或 fs.readdirSync()。
// fs.readdir(dir, { withFileTypes: true }, (err, dirent) => {
//     if (err) {
//         console.log(err)
//         return
//     }
//     dirent.forEach((entry) => {
//         console.log(`文件名：${entry.name}; 文件类型：${entry.isFile() ? "文件" : "目录"}`)
//     })
// })


// 文件内容替换
// 编写一个 Node.js 脚本，读取一个文本文件（example.txt），将文件中的所有单词 "Node.js" 替换为 "JavaScript"，然后将修改后的内容写回到原文件。
// 提示：使用 fs.readFile() 和 fs.writeFile()，结合正则表达式。



// 文件复制
// 编写一个 Node.js 脚本，将一个文件（source.txt）的内容复制到另一个文件（destination.txt）中。
// 提示：可以使用 fs.copyFile() 或手动读取和写入文件。



// 文件大小统计
// 编写一个 Node.js 脚本，计算指定目录下所有文件的总大小（以字节为单位）。
// 提示：使用 fs.readdir() 和 fs.stat()。



// 文件备份
// 编写一个 Node.js 脚本，将指定目录下的所有文件备份到另一个目录中。备份文件的命名规则为：原文件名_备份时间戳。
// 提示：使用 fs.readdir()、fs.copyFile() 和 Date.now()。



// 文件系统监控
// 编写一个 Node.js 脚本，监控指定目录的文件变化（如新增文件、删除文件、修改文件）。当检测到变化时，打印出变化的文件名和变化类型。
// 提示：使用 fs.watch() 或 fs.watchFile()。



// 文件压缩与解压
// 编写一个 Node.js 脚本，完成以下任务：
// 将指定目录下的所有文件压缩为一个 .zip 文件。
// 解压一个 .zip 文件到指定目录。
// 提示：可以使用第三方模块（如 archiver 或 unzipper）。



// 日志文件管理
// 编写一个 Node.js 脚本，实现一个简单的日志文件管理系统：
// 每天生成一个新的日志文件，文件名格式为 log_YYYYMMDD.txt。
// 将日志内容追加到当天的日志文件中。
// 提供一个命令行接口，允许用户输入日志内容。
// 提示：使用 fs.appendFile() 和 Date 对象。